package ThreadPool.creatpool.createMethod1.MyRunnableTest;

import java.util.List;
import java.util.concurrent.*;

/*
 * ExecutorService---->ThreadPoolExecutor 创建线程池
 * */
public class CreatThreadPool1 {
    public static void main(String[] args) {
        ThreadPoolExecutor tpe = new ThreadPoolExecutor(3,//核心线程数
                5,//最大线程数
                10,//临时线程存活时间
                TimeUnit.SECONDS,//时间单位
                new ArrayBlockingQueue<Runnable>(5),//阻塞队列
                Executors.defaultThreadFactory(),//线程工厂
                new ThreadPoolExecutor.CallerRunsPolicy()//拒绝策略
        );

        tpe.execute(new MyRunnable());//第一个核心线程 执行
        tpe.execute(new MyRunnable());//第二个核心线程 执行
        tpe.execute(new MyRunnable());//第三个核心线程 执行
        tpe.execute(new MyRunnable());//进入队列
        tpe.execute(new MyRunnable());//进入队列
        tpe.execute(new MyRunnable());//进入队列

        tpe.execute(new MyRunnable());//进入队列
        tpe.execute(new MyRunnable());//进入队列
        tpe.execute(new MyRunnable());//第一个临时线程 执行
        tpe.execute(new MyRunnable());//第二个临时线程 执行
        tpe.execute(new MyRunnable());//主程序执行
        //获取队列还未执行的任务
        List<Runnable> list = tpe.shutdownNow();
        System.out.println(list.size());
    }
}
    /*
        pool-1-thread-3线程执行：0
        pool-1-thread-2线程执行：0
        pool-1-thread-4线程执行：0
        main线程执行：0
        pool-1-thread-5线程执行：0
        pool-1-thread-1线程执行：0

    */
